轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet) |
您所在的位置:网站首页 › mybatis pagebounds › 轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet) |
写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!! 最近看的轻量化神经网络:SqueezeNet、Xception、MobileNet、ShuffleNet 时间轴 2016.02 伯克利&斯坦福提出 SqueezeNet 2016.10 google提出 Xception 2017.04 google提出 MobileNet 2017.07 face++提出 ShuffleNet 模型轻量化的方法 卷积核分解:使用1xN和NX1卷积核代替NXN卷积核; 使用深度压缩deep compression方法:网络剪枝、量化、哈弗曼编码; 奇异值分解; 硬件加速器; 低精度浮点数保存; 小模型的好处: 在分布式训练中,与服务器通信需求小; 参数少,从云端下载模型的数量少; 更适合在嵌入式、移动设备上部署; 几种模型小结: SqueezeNet,提出了fire module【使用 1x1 卷积核替换部分 3x3 卷积核,减少参数量;同时在squeeze阶段,限制 input feature map的channel数,又一次减少参数】。在整体网络模型中减少pooling,平均每3个fire module后有一个max pooling,分类前的全连接层替换成average pooling。 Xception,参差结构+可分离卷积(Separable Convolution)【对每一个通道先进行 1x1 卷积,再进行 3x3 卷积】。在Inception v3模型上改进, 参数量没减少,精度提高。 MobileNetv1,宽度\分辨率因子 + 深度可分离卷积(Depthwise Separable Convolution)【对每一个通道先进行 3x3 卷积,再进行 1x1 卷积】。参数量下降 MobileNetv2,倒残差结构+深度可分离卷积+relu6。发现relu对低维特征损失较严重,1)提出反残差模块【先升维:增加信息量,再降维度:较少参数】;2)较少block最后的Relu改为lineat,减少信息破坏。移动部署float16,所以换成relu6 MobileNetv3,倒残差结构+深度可分离卷积+se注意力机制+h-swish激活。使用堆积木手段和nas搜索出一个small结构、一个large结构 ShuffleNet,深度可分离卷积+分组卷积+shuffle机制 。借鉴Resnext的分组卷积思想,不过全部只用1x1卷积核,减少参数量;加入了shuffle机制(通道清洗),加强了通道间的信息流通,一定程度上缓解了由于分组卷积导致的通道关系损失。 1. SqueezeNet 设计原则 替换3x3的卷积kernel为1x1的卷积kernel 减少输入3x3卷积的input feature map数量 减少pooling Fire ModuleFire Module是本文的核心构件,思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number即满足上面的设计原则(2)。expand层之后将1x1和3x3的卷积output feature maps在channel维度拼接起来。 总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。 先进行普通卷积操作,再对 1×11×1 卷积后的每个channel分别进行 3×33×3 卷积操作,最后将结果 concat: Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution Module。如下图所示。整个网络被分为了三个部分:Entry,Middle和Exit。 Xception参考 深度可分离卷积理解 3. MobileNet 设计原则 采用depthwise separable convolution,就是分离卷积核,减少参数量 设置宽度因子width multipler【在channel上】和分辨率因子resolution multiplier【在feature map的长、宽上】,减小参数量 Depthwise Separable Convolution
参考1:详解MobileNetV2 参考2:MobileNet v1 和 MobileNet v2 v1使用了Depthwise Separable Convolution,通过将跨通道的3 x 3卷积换成单通道的3 x 3卷积 + 跨通道的1 x 1卷积来达到减少参数的目的【3 x 3卷积核约变为原理的1/8】 v2在v1的基础上加入了残差结构,同时发现relu对低维通道的feature map映射到高维再映射回低维具有非常严重的信息损失。针对这个问题,两个办法,1.使用Inverted residuals【因为relu对于高维特征影响较小,所以扩展成高维经过relu再压缩】;2.使用Linear Bottleneck【因为高维映射到低维,使用relu会滤掉有用信息,直接换成线性激活函数】 Q:为什么低维特征效果不好? A:因为低维特征对应的卷积核也少,卷积核少学到图片内的特征就很有限,所以效果不好模块结构: 借鉴resnext的分组卷积,全部使用1x1卷积核 什么是通道shuffle,就是在分组卷积后得到的feature map不直接进行concat,先将每组feature map按通道打乱,重新concat,如下图所示: 对于一个卷积层分为g组, 分组卷积后一共得到g×n个输出通道的feature map; 将feature map 进行 reshape为(g,n); 进行转置为(n,g); 对转置结果flatten,再分回g组作为下一层的输入。![]() a是标准的残差结构,不过是3x3卷积核使用了mobilenet中的depthwise convolution操作; b是在a的基础上加了本文的通道shuffle操作,先对1x1卷积进行分组卷积操作,然后进行channel shuffle; c是在旁路加了一步长为2的3x3的平均池化,并将前两者残差相加的操作改为了通道concat,增加了通道数量。 参考链接: https://blog.csdn.net/liuxiao214/article/details/81875251 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |